package it.scambiocorse.pubblica.controller;

import java.util.ArrayList;
import java.util.List;

import it.scambiocorse.dao.AreaService;
import it.scambiocorse.dao.ServizioService;
import it.scambiocorse.dao.UtenteService;
import it.scambiocorse.model.AreaType;
import it.scambiocorse.model.ClienteType;
import it.scambiocorse.model.ServizioType;
import it.scambiocorse.model.UtenteType;
import it.scambiocorse.utils.LabelValueBean;
import it.scambiocorse.utils.Utils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.springframework.web.servlet.view.RedirectView;

public class InserimentoServizioFormController extends SimpleFormController {
	protected final Log logger = LogFactory.getLog(getClass());
	
	
	private ServizioService servizioDao = null;
	private AreaService areaDao = null;
	private UtenteService utenteDao = null;

	
	public AreaService getAreaDao() {
		return areaDao;
	}
	public void setAreaDao(AreaService areaDao) {
		this.areaDao = areaDao;
	}
	public ServizioService getServizioDao() {
		return servizioDao;
	}
	public void setServizioDao(ServizioService servizioDao) {
		this.servizioDao = servizioDao;
	}

	public UtenteService getUtenteDao() {
		return utenteDao;
	}
	public void setUtenteDao(UtenteService utenteDao) {
		this.utenteDao = utenteDao;
	}

	
  protected Object formBackingObject(HttpServletRequest request) throws Exception {
    logger.warn("*** Sono in InserimentoServizioFormController-formBackingObject ");
    UtenteType dettaglio = null;
    try {
    	
		    HttpSession session = request.getSession(false);
				if (session == null) {
					logger.warn("Sessioe Scaduta");
					return new ModelAndView("sessioneScaduta");
				} else {
					dettaglio = (UtenteType)session.getAttribute("dettaglio");
					if (dettaglio == null ) {
						return new ModelAndView("sessioneScaduta");
					}
				}
			    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();			
				
				session.setAttribute("dettaglio", dettaglio);
					
					ok.add(new LabelValueBean("Stai inserendo un servizio nell'area pubblica, questo servizio puo' essere acquisito da altri utenti", "")); 
					
					ok.add(new LabelValueBean("Una volta inserito il servizio, avrai sempre la possibilita' di monitorare l'andamento e di decidere se e chi potra' eseguire il servizio.", ""));
			    	request.setAttribute("listaOk", ok);
		
				ServizioType servizio = new ServizioType();

		    logger.warn("*** sto uscendo in InserimentoServizioFormController-formBackingObject ");
		    return servizio;
		    
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+dettaglio.getIdUser());
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}
    
  }
  
  
  protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors)	throws Exception {
  	logger.warn("Sono in InserimentoServizioFormController.onSubmit(...)");
  	ServizioType serv = (ServizioType)command;
  
  	ModelAndView mav = null;
  	UtenteType dettaglio = null;
  	try {
  			mav = new ModelAndView("pubDettaglioServizioOut");
  			HttpSession session = request.getSession();
  			dettaglio = (UtenteType)session.getAttribute("dettaglio");
  			
  			serv.setIdUserInse(dettaglio.getIdUser());
  			serv.getArea().setIdArea(1); //Area Pubblica
  		    serv.setDataora(Utils.dataStringTimestamp(serv.getData()+" "+serv.getOre()+":"+serv.getMinuti(), "dd/MM/yyyy hh:mm"));
	    	int idServ = servizioDao.inserisciServizio(serv);
			String oraFine = null;
			if (Utils.isValid(serv.getOreFine()+":"+serv.getMinutiFine())){
				oraFine = Utils.getSysDateStr()+" "+serv.getOreFine()+":"+serv.getMinutiFine();
				if (Utils.Time24HoursValidator(oraFine)) {
					serv.setOraFine(Utils.dataStringTimestamp(oraFine, "dd/MM/yyyy hh:mm"));
				}
			}	    	
		    List<LabelValueBean> ok = new ArrayList<LabelValueBean>();			
			ok.add(new LabelValueBean("Servizio inserito correttamente!", ""));
			
			
	    	request.setAttribute("listaOk", ok);
	    	mav.addObject("servizio", serv);
	    	mav.addObject("back", "listaServiziOut.html");
//	    	

	    	
	    	
	    	
		}catch (Exception e) {
			logger.error("SI E' VERIFICATO UN ERRORE");
			logger.error("Utente: "+dettaglio.getIdUser());
			logger.error(e);
			return new ModelAndView("gestioneErrore").addObject(e);
		}

  	
  	
  	return mav;
  }
  
  protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
  }
}
